package com.admin.qujiang.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 日期工具类
 * Created by ht on 2018/6/5.
 *
 * @author ht
 */
public class TimeUtils {
    /**
     * 一年12个月
     */
    public static final Integer MONTH_NUMBERS = 12;

    /**
     * 获取当前年月日时分秒
     */
    public static String getCurrentDateTime() {
        Date date = new Date();
        return TimeFormatUtils.dateToLongStr(date);
    }

    /**
     * 获取当前年月日
     */
    public static String getCurrentDate() {
        Date date = new Date();
        return TimeFormatUtils.dateToStr(date);
    }

    /**
     * 获取昨天年月日
     */
    public static String getYesterdayDate() {
        Date date = new Date();
        date.setTime(date.getTime() - 24 * 60 * 60 * 1000L);
        return TimeFormatUtils.dateToStr(date);
    }

    /**
     * 获取当前日期 格式自定义
     */
    public static String getCurrentDateWithFormat(String format) {
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        return formatter.format(date);
    }

    /**
     * 获取昨日日期 格式自定义
     */
    public static String getYesterdayDateWithFormat(String format) {
        Date date = new Date();
        date.setTime(date.getTime() - 24 * 60 * 60 * 1000L);
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        return formatter.format(date);
    }

    /**
     * 获取30天之前的日期
     */
    public static String getLastMonthDate() {
        Date date = new Date();
        date.setTime(date.getTime() - 30 * 24 * 60 * 60 * 1000L);
        return TimeFormatUtils.dateToStr(date);
    }

    /**
     * 获取无符号的当前年月日时分秒
     */
    public static String getUnsignedCurrentDateTime() {
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
        return formatter.format(date);
    }

    /**
     * 获取今年年份
     */
    public static String getThisYearStr() {
        return String.valueOf(getThisYear());
    }

    /**
     * 获取去年年份
     */
    public static String getLastYearStr() {
        return String.valueOf(Calendar.getInstance().get(Calendar.YEAR) - 1);
    }

    /**
     * 获取当前年份
     */
    public static Integer getThisYear() {
        return Calendar.getInstance().get(Calendar.YEAR);
    }

    /**
     * 获取当前月份
     */
    public static Integer getThisMonth() {
        return Calendar.getInstance().get(Calendar.MONTH) + 1;
    }

    /**
     * 检验时间是否满足yyyy-mm-dd格式
     *
     * @return 符合返回true，反之返回false
     */
    public static boolean checkDateFormat(String dataStr) {
        String regex = "[0-9]{4}-[0-9]{2}-[0-9]{2}";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(dataStr);
        boolean dateFlag = matcher.matches();
        if (!dateFlag) {
            return false;
        }
        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        formatter.setLenient(false);
        try {
            formatter.parse(dataStr);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 返回时间间隔（小时）
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 间隔小时
     */
    public static Long getTimeInterval(long startTime, long endTime) {
        return (endTime - startTime) / (60 * 60 * 1000);
    }

    /**
     * 获取当前时间
     */
    public static Date getNow() {
        return new Date();
    }
}
